package com.example.contestsystem.Service;

import com.example.contestsystem.Dao.JoinTeamRepository;
import com.example.contestsystem.Dao.SignUpContestRepository;
import com.example.contestsystem.Dao.TeamRepository;
import com.example.contestsystem.Entity.SignUpContest;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class SignUpContestService {
    final SignUpContestRepository signUpContestRepository;
    final JoinTeamRepository joinTeamRepository;
    final TeamRepository teamRepository;

    public SignUpContestService(SignUpContestRepository signUpContestRepository,
                                JoinTeamRepository joinTeamRepository,
                                TeamRepository teamRepository) {
        this.signUpContestRepository = signUpContestRepository;
        this.joinTeamRepository = joinTeamRepository;
        this.teamRepository = teamRepository;
    }

    public List<SignUpContest> findByStuAccount(int stuAccount) {
        return this.signUpContestRepository.findByStuAccount(stuAccount);
    }

    public SignUpContest participate(SignUpContest signUpContest) {
        signUpContest.setSignUpId((new Date().hashCode()));
        return this.signUpContestRepository.save(signUpContest);
    }


    public boolean cancel(String contestId, int stuAccount) {
        // 如果是团队赛，队长必须先解散队伍才能取消报名
        if(this.teamRepository.findByCaptainAccountAndContestId(stuAccount, contestId) != null)
            return false;
        // 如果是团队赛，非队长必须先退出队伍才能取消报名
        if (this.joinTeamRepository.findByContestIdAndStuAccount(contestId, stuAccount) != null){
            return false;
        }
        this.signUpContestRepository.deleteByContestIdAndStuAccount(contestId, stuAccount);
        this.joinTeamRepository.deleteByContestIdAndStuAccount(contestId, stuAccount);
        return true;
    }
}
